package com.zhoug.demo.sendpush.huawei;

import java.util.List;

/**
 * @description: 类的简要描述
 * @author: 35574
 * @date: 2025/11/4 17:09
 */
public class AndroidNotification {
    /**
     * Android通知栏消息标题，如果此处设置了title则会覆盖message.notification.title字段，且发送通知栏消息时，此处title和message.notification.title两者最少需要设置一个。
     */
    private String title;
    /**
     * Android通知栏消息内容，如果此处设置了body则会覆盖message.notification.body字段，且发送通知栏消息时，此处body和message.notification.body两者最少需要设置一个。
     */
    private String body;
    /**
     * 自定义通知栏消息左侧小图标，此处设置的图标文件必须存放在应用的/res/raw路径下，例如“/raw/ic_launcher”，对应应用本地的“/res/raw/ic_launcher.xxx”文件。支持的文件格式目前包括PNG、JPG。自定义小图标规格规范请参见通知图标规范。
     *
     */
    private String icon;
    /**
     * 自定义通知栏按钮颜色，以#RRGGBB格式，其中RR代表红色的16进制色素，GG代表绿色的16进制色素，BB代表蓝色的16进制色素，样例：#FFEEFF。
     */
    private String color;
    /**
     * 自定义消息通知铃声。在新创建渠道时有效，此处设置的铃声文件必须存放在应用的/res/raw路径下，例如设置为“/raw/shake”，对应应用本地的“/res/raw/shake.xxx”文件。支持的文件格式包括MP3、WAV、MPEG等，如果不设置，则用默认系统铃声。
     *
     * 说明
     * 由于铃声是通知渠道的属性，因此铃声仅在渠道创建时有效，渠道创建后，即使设置自定义铃声也不会播放，而使用创建渠道时设置的铃声。
     */
    private String sound;
    /**
     * 默认铃声控制开关，取值如下：
     *
     * true：使用系统默认铃声（默认值）
     * false：使用sound自定义铃声
     */
    private Boolean default_sound;
    /**
     * 消息标签，同一应用下使用同一个消息标签的消息会相互覆盖，只展示最新的一条。
     */
    private String tag;
    /**
     * 消息点击行为，具体字段请参见ClickAction结构体的定义。
     *
     * 如果是Android通知栏消息时，则该参数必选
     */
    private ClickAction click_action;
    /**
     * 显示本地化body的StringId，具体使用请参见通知栏消息语言本地化。
     */
    private String body_loc_key;
    /**
     * 本地化body的可变参数，具体使用请参见通知栏消息语言本地化。样例："body_loc_args":["1","2","3"]
     */
    private List<String> body_loc_args;
    /**
     * 显示本地化title的StringId，具体使用请参见通知栏消息语言本地化。
     */
    private String title_loc_key;
    /**
     * 本地化title的可变参数，具体使用请参见通知栏消息语言本地化。样例：
     *
     * "title_loc_args":["1","2","3"]
     */
    private List<String> title_loc_args;
    /**
     *消息国际化多语言参数，body_loc_key，title_loc_key优先从multi_lang_key读取内容，如果key不存在，则从APK本地字符串资源读，具体使用请参见通知栏消息语言本地化。
     *
     * 最多设置3种语言。
     */
//    private Object multi_lang_key;

    /**
     * 自Android O版本后可以支持通知栏自定义渠道，指定消息要展示在哪个通知渠道上，详情请参见自定义通知渠道。
     */
    private String channel_id;
    /**
     * Android通知栏消息简要描述
     */
    private String notify_summary;
    /**
     * 自定义通知栏消息右侧小图片URL，功能和message.notification.image字段一样，如果此处设置，则覆盖message.notification.image中的值。URL使用的协议必须是HTTPS协议，取值样例：https://example.com/image.png。
     *
     * 说明
     * 图片文件须小于512KB，规格建议为40dp x 40dp，弧角大小为8dp。超出建议规格的图片会存在图片压缩或图片显示不全的情况。图片格式建议使用JPG/JPEG/PNG。
     */
    private String image;
    /**
     * 通知栏样式，取值如下：
     *
     * 0：默认样式（默认值）
     * 1：大文本样式
     * 3：Inbox样式
     */
    private Integer style;
    /**
     * Android通知栏消息大文本标题，当style为1时必选，设置big_title后通知栏展示时，使用big_title而不用title
     */
    private String big_title;
    /**
     * Android通知栏消息大文本内容，当style为1时必选，设置big_body后通知栏展示时，使用big_body而不用body。
     */
    private String big_body;
    /**
     * 每条消息在通知显示时的唯一标识。不携带或者设置-1时，推送服务自动为每条消息生成一个唯一标识；不同的通知栏消息可以拥有相同的notifyId，实现新消息覆盖旧消息功能。
     */
    private String notify_id;
    /**
     * 消息分组，例如发送10条带有同样group字段的消息，手机上只会展示该组消息中最新的一条和当前该组接收到的消息总数目，不会展示10条消息
     */
    private String group;
    /**
     * Android通知消息角标控制，具体字段请参见BadgeNotification结构体的定义
     */
    private BadgeNotification  badge;
    /**
     * 设备收到通知消息后状态栏上显示的内容提示。受Android系统原生机制的限制，在Android 5.0版本（API Level 21）之后的设备上，设置了该字段也不会显示。
     */
    private String ticker;
    /**
     * 设置通知栏消息的到达时间，如果您同时发送多条消息，Android通知栏中的消息根据这个值进行排序，同时将排序后的消息在通知栏上显示。该时间戳为UTC时间戳，样例：2014-10-02T15:01:23.045123456Z。
     */
    private String when;
    /**
     * 消息的提醒级别，取值如下：
     *
     * LOW：表示通知栏消息预期的提醒方式为静默提醒，消息到达手机后，无铃声震动。
     * NORMAL：表示通知栏消息预期的提醒方式为强提醒，消息到达手机后，以铃声、震动提醒用户。终端设备实际消息提醒方式将根据category字段取值或者智能分类结果进行调整（默认值）
     */
    private String importance;
    /**
     * 是否使用系统默认振动模式控制开关，默认值为true。
     */
    private Boolean use_default_vibrate;
    /**
     * 是否使用默认呼吸灯模式控制开关，默认值为true。
     */
    private Boolean use_default_light;
    /**
     * Android自定义通知消息振动模式，每个数组元素按照“[0-9]+|[0-9]+[sS]|[0-9]+[.][0-9]{1,9}|[0-9]+[.][0-9]{1,9}[sS]”格式，取值样例["3.5S","2S","1S","1.5S"]，数组元素最多支持10个，每个元素数值整数大于0小于等于60。暂不支持EMUI 11。样例："vibrate_config":["1","3"]。
     */
    private List<String> vibrate_config;
    /**
     * Android通知栏消息可见性，取值如下：
     *
     * “VISIBILITY_UNSPECIFIED”：未指定visibility，效果等同于设置了“PRIVATE”
     * “PUBLIC”：锁屏时收到通知栏消息，显示消息内容
     * “SECRET”：锁屏时收到通知栏消息，不提示收到通知消息
     * “PRIVATE”：设置了锁屏密码，“锁屏通知”（导航：“设置 > 通知 > 隐藏通知内容”）选择“隐藏通知内容”时收到通知消息，不显示消息内容（默认值）
     */
    private String visibility;
    /**
     * 自定义呼吸灯颜色，
     */
    private LightSettings light_settings;
    /**
     * 应用在前台时，通知栏消息是否展示开关（默认值为前台展示true）。具体使用请参见前台应用的通知处理。
     */
    private Boolean foreground_show;
    /**
     * 关联终端设备登录用户标识，最大长度为64。
     */
    private String profile_id;
    /**
     * 当style为3时，Inbox样式的内容（必选），支持最大5条内容，每条最大长度1024。展示效果请参见通知栏消息Inbox样式。样例："inbox_content":["content1","content2","content3"]。
     */
    private List<String> inbox_content;
    /**
     * 通知栏消息动作按钮，最多设置3个。具体字段请参见Button结构体的定义。样例："buttons":[{"name":"打开应用","action_type":"1"}]。
     */
    private List<Button> buttons;


    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getSound() {
        return sound;
    }

    public void setSound(String sound) {
        this.sound = sound;
    }

    public Boolean getDefault_sound() {
        return default_sound;
    }

    public void setDefault_sound(Boolean default_sound) {
        this.default_sound = default_sound;
    }

    public String getTag() {
        return tag;
    }

    public void setTag(String tag) {
        this.tag = tag;
    }

    public ClickAction getClick_action() {
        return click_action;
    }

    public void setClick_action(ClickAction click_action) {
        this.click_action = click_action;
    }

    public String getBody_loc_key() {
        return body_loc_key;
    }

    public void setBody_loc_key(String body_loc_key) {
        this.body_loc_key = body_loc_key;
    }

    public List<String> getBody_loc_args() {
        return body_loc_args;
    }

    public void setBody_loc_args(List<String> body_loc_args) {
        this.body_loc_args = body_loc_args;
    }

    public String getTitle_loc_key() {
        return title_loc_key;
    }

    public void setTitle_loc_key(String title_loc_key) {
        this.title_loc_key = title_loc_key;
    }

    public List<String> getTitle_loc_args() {
        return title_loc_args;
    }

    public void setTitle_loc_args(List<String> title_loc_args) {
        this.title_loc_args = title_loc_args;
    }

    public String getChannel_id() {
        return channel_id;
    }

    public void setChannel_id(String channel_id) {
        this.channel_id = channel_id;
    }

    public String getNotify_summary() {
        return notify_summary;
    }

    public void setNotify_summary(String notify_summary) {
        this.notify_summary = notify_summary;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public Integer getStyle() {
        return style;
    }

    public void setStyle(Integer style) {
        this.style = style;
    }

    public String getBig_title() {
        return big_title;
    }

    public void setBig_title(String big_title) {
        this.big_title = big_title;
    }

    public String getBig_body() {
        return big_body;
    }

    public void setBig_body(String big_body) {
        this.big_body = big_body;
    }

    public String getNotify_id() {
        return notify_id;
    }

    public void setNotify_id(String notify_id) {
        this.notify_id = notify_id;
    }

    public String getGroup() {
        return group;
    }

    public void setGroup(String group) {
        this.group = group;
    }

    public BadgeNotification getBadge() {
        return badge;
    }

    public void setBadge(BadgeNotification badge) {
        this.badge = badge;
    }

    public String getTicker() {
        return ticker;
    }

    public void setTicker(String ticker) {
        this.ticker = ticker;
    }

    public String getWhen() {
        return when;
    }

    public void setWhen(String when) {
        this.when = when;
    }

    public String getImportance() {
        return importance;
    }

    public void setImportance(String importance) {
        this.importance = importance;
    }

    public Boolean getUse_default_vibrate() {
        return use_default_vibrate;
    }

    public void setUse_default_vibrate(Boolean use_default_vibrate) {
        this.use_default_vibrate = use_default_vibrate;
    }

    public Boolean getUse_default_light() {
        return use_default_light;
    }

    public void setUse_default_light(Boolean use_default_light) {
        this.use_default_light = use_default_light;
    }

    public List<String> getVibrate_config() {
        return vibrate_config;
    }

    public void setVibrate_config(List<String> vibrate_config) {
        this.vibrate_config = vibrate_config;
    }

    public String getVisibility() {
        return visibility;
    }

    public void setVisibility(String visibility) {
        this.visibility = visibility;
    }

    public LightSettings getLight_settings() {
        return light_settings;
    }

    public void setLight_settings(LightSettings light_settings) {
        this.light_settings = light_settings;
    }

    public Boolean getForeground_show() {
        return foreground_show;
    }

    public void setForeground_show(Boolean foreground_show) {
        this.foreground_show = foreground_show;
    }

    public String getProfile_id() {
        return profile_id;
    }

    public void setProfile_id(String profile_id) {
        this.profile_id = profile_id;
    }

    public List<String> getInbox_content() {
        return inbox_content;
    }

    public void setInbox_content(List<String> inbox_content) {
        this.inbox_content = inbox_content;
    }

    public List<Button> getButtons() {
        return buttons;
    }

    public void setButtons(List<Button> buttons) {
        this.buttons = buttons;
    }
}
